package com.builder;

import java.util.ArrayList;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import com.model.Facturacion;
import com.model.FacturacionDetalle;
import com.view.ClienteView;
import com.view.FacturacionDetalleView;
import com.view.FacturacionView;

@ManagedBean
@ViewScoped
@SuppressWarnings("serial")
public class FacturacionBuilder extends
		BaseBuilder<FacturacionView, Facturacion> {

	@ManagedProperty("#{clienteBuilder}")
	private ClienteBuilder clienteBuilder;

	@ManagedProperty("#{facturacionDetalleBuilder}")
	private FacturacionDetalleBuilder facturacionDetalleBuilder;

	@Override
	public Facturacion toDomain(FacturacionView view) {
		return new Facturacion(
				view.getId(),
				view.getTipoFactura(),
				view.getFecha(),
				view.getFechaCreacion(),
				view.getNeto(),
				view.getIva(),
				view.getTotal(),
				view.getCliente() == null ? null : clienteBuilder.toDomain(view
						.getCliente()),
				view.getNumero(),
				view.getNombreArchivo(),
				view.getListaFacturacionDetalle() != null
						&& view.getListaFacturacionDetalle().size() > 0 ? facturacionDetalleBuilder
						.toDomain(view.getListaFacturacionDetalle())
						: new ArrayList<FacturacionDetalle>());
	}

	@Override
	public FacturacionView toView(Facturacion model) {

		return new FacturacionView(
				model.getID(),
				model.getTipoFactura(),
				model.getFecha(),
				model.getFechaCreacion(),
				model.getNeto(),
				model.getIva(),
				model.getTotal(),
				model.getCliente() == null ? new ClienteView() : clienteBuilder
						.toView(model.getCliente()),
				model.getNumero(),
				model.getNombreArchivo(),
				model.getListaFacturacionDetalle() != null
						&& model.getListaFacturacionDetalle().size() > 0 ? facturacionDetalleBuilder
						.toView(model.getListaFacturacionDetalle())
						: new ArrayList<FacturacionDetalleView>());
	}

	public ClienteBuilder getClienteBuilder() {
		return clienteBuilder;
	}

	public void setClienteBuilder(ClienteBuilder clienteBuilder) {
		this.clienteBuilder = clienteBuilder;
	}

	public FacturacionDetalleBuilder getFacturacionDetalleBuilder() {
		return facturacionDetalleBuilder;
	}

	public void setFacturacionDetalleBuilder(
			FacturacionDetalleBuilder facturacionDetalleBuilder) {
		this.facturacionDetalleBuilder = facturacionDetalleBuilder;
	}

}
